package com.cskaoyan.market.admin.service;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.cskaoyan.market.admin.bo.ChannelBO;
import com.cskaoyan.market.db.domain.MarketOrder;

/**
 * @author BlackFlame33
 * @date 2023/03/20
 **/
public interface AdminOrderService {
    /**
     * 根据条件筛选，返回合适的订单列表
     *
     * @param page 页数
     * @param limit 每页数量
     * @param orderStatusArray 订单状态
     * @param sort 以何种字段排序
     * @param order 升序或降序
     * @param start 日期筛选起始时间
     * @param end 日期筛选结束时间
     * @param userId 用户 id
     * @param orderSn 订单编号
     *
     * @return java.util.List<com.cskaoyan.market.db.domain.MarketOrder>
     * @author BlackFlame33
     * @since 2023/03/20 14:39
     */
    List<MarketOrder> getOrderList(Integer page, Integer limit, Short[] orderStatusArray, String sort, String order,
        String start, String end, Integer userId, String orderSn);

    /**
     * 此方法通过 id 返回适应前端 JSON 格式的对应 Map 结构数据j
     *
     * @param id 订单 id
     * @return java.util.Map<java.lang.String,java.lang.Object>
     * @author BlackFlame33
     * @since 2023/03/20 17:50
     */
    Map<String, Object> getOrderDetail(Integer id);

    /**
     * 此方法将订单状态更改为退款。并根据修改情况返回状态码，成功返回 0，否则返回非 0
     *
     * @param orderId 订单主键 id
     * @param refundMoney 退款金额
     *
     * @return java.lang.Integer
     * @author BlackFlame33
     * @since 2023/03/20 22:53
     */
    Integer refundOrder(Integer orderId, BigDecimal refundMoney);

    /**
     * 此方法返回快递公司列表
     *
     * @return java.util.Map<java.lang.String, java.lang.String>
     * @throws IOException 当文件不存在时，抛出此异常
     * @author BlackFlame33
     * @since 2023/03/21 00:10
     */
    List<ChannelBO> getChannelList() throws IOException;

    /**
     * 此方法更改订单状态为发货，并返回状态码。1 为正常，非 1 为错误
     *
     * @param orderId 订单 id
     * @param shipChannel 快递公司
     * @param shipSn 快递编号
     *
     * @return int 状态码，1 为正常，非 1 为错误
     * @author BlackFlame33
     * @since 2023/03/21 01:08
     */
    int shipOrder(Integer orderId, String shipChannel, String shipSn);

    /**
     * 此方法通过订单 id 删除订单，更新时间
     *
     * @param orderId 订单 id
     *
     * @return int
     * @author BlackFlame33
     * @since 2023/03/21 14:21
     */
    int deleteOrder(Integer orderId);

    void reply(String commentId, String content);
}